package cn.tedu.justone.pack03日期;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;

/**
 * ZZ：JustOne
 * VX：Andylau2020smile
 * DY：JustOne2018
 * ZT：《》
 */
public class Demo01_LocalDate常用方法 {
    public static void main(String[] args) {
        //
        //Java 8添加了一些新的类用于处理日期、时间数据
        // 1,LocalDate 关注日期，即年、月、日、星期
        // 2,LocalTime 关注时间，即时、分、秒等
        // 3,LocalDateTime 关注日期、时间，本质上是以上两个对象创造出来的新对象
        //

        //------------------------------------------
        //获取LocalDate对象
        //获取LocalDate对象
        //获取LocalDate对象

        //获取当前时间对应的LocalDate对象
        LocalDate localDate1 = LocalDate.now();
        System.out.println(localDate1);//2022-08-28

        //获取指定时间对应的LocalDate对象
        LocalDate localDate2 = LocalDate.of(2038,8,18);
        System.out.println(localDate2);//2038-08-18

        //获取指定字符中对应的LocalDate对象。
        // 1,要求字符串必须严格匹配格式，例如月份必须是[08]而不是[8]
        // 2,要求必须是"2058-08-18" 而不是 "2058/08/18"
        LocalDate localDate3 = LocalDate.parse("2058-01-07");
        System.out.println(localDate3);

        //------------------------------------------
        //获取LocalDate的字段值
        //获取LocalDate的字段值
        //获取LocalDate的字段值

        int year = localDate3.getYear(); //-------------获取年：2058

        Month month= localDate3.getMonth();//-----------获取月：JANUARY
        int monthValue = localDate3.getMonthValue();//--获取月的值：1

        int day = localDate3.getDayOfMonth(); //--------获取日：7

        DayOfWeek week = localDate3.getDayOfWeek(); //--获取星期：MONDAY
        int weekValue = week.getValue();//--------------获取星期的值：1

        boolean leap = localDate3.isLeapYear();//-------是否是润年：false
        int lenMonth = localDate3.lengthOfMonth();//----该月有多少天：31
        int lenYear = localDate3.lengthOfYear();//------该年有多少天：365


        //------------------------------------------
        //修改LocalDate的字段值
        //修改LocalDate的字段值
        //修改LocalDate的字段值
        // 1,LocalDate是不可变对象，以下API都是返回新对象

        LocalDate localDate4 = LocalDate.parse("2012-12-14");

        LocalDate d1 = localDate4.withYear(2022);//------设置年，变成了：2022-12-14
        System.out.println(d1);//2022-12-14

        LocalDate d2 = localDate4.withMonth(9);//--------设置月，变成了：2012-09-14
        System.out.println(d2);//2012-09-14

        LocalDate d3 = localDate4.withDayOfMonth(15);//--设置日，变成了：2012-12-15
        System.out.println(d3);//2012-12-15

        //------------------------------------------
        //增减LocalDate的字段值
        //增减LocalDate的字段值
        //增减LocalDate的字段值
        LocalDate localDate5 = LocalDate.parse("2000-01-01");

        //增加10年。也可以填负数，就是减去10年
        LocalDate date1 = localDate5.plusYears(10);//---10年后，变成了：2010-01-01
        System.out.println(date1);
        //减去10年。也可以填负数，就是加上10年
        LocalDate date2 = localDate5.minusYears(10);//--10年前，变成了：1990-01-01
        System.out.println(date2);

        //增加36个月，若有跨年会自动更改年份，可填负数进行减月份
        LocalDate date3 = localDate5.plusMonths(36);//--36个月后，变成了：2003-01-01
        System.out.println(date3);
        //减去36个月，若有跨年会自动更改年份，可填负数进行加月份
        LocalDate date4 = localDate5.minusMonths(36);//-36个月前，变成了：1997-01-01
        System.out.println(date4);

        //增加5个星期，若有跨年跨月会自动更改成对应的年月，可填负数进行减星期
        LocalDate date5 = localDate5.plusWeeks(5);//----5周后，变成了：2000-02-05
        System.out.println(date5);
        //减去5个星期，若有跨年跨月会自动更改成对应的年月，可填负数进行加星期
        LocalDate date6 = localDate5.minusMonths(5);//--5周前，变成了：1999-08-01
        System.out.println(date6);

        //加上40天，若有跨年跨月会自动更改成对应的年月，可填负数进行减天
        LocalDate date7 = localDate5.plusDays(40);//----40天后，变成了：2000-02-10
        System.out.println(date7);
        //减去40天，若有跨年跨月会自动更改成对应的年月，可填负数进行加天
        LocalDate date8 = localDate5.minusDays(40);//---40天后，变成了：1999-11-22
        System.out.println(date8);

    }
}








